﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using BookExpress.DB;
using System.Data.SqlClient;

namespace BookExpress.Fornecedor
{
    public class Fornecedor
    {
        private int forCod;
        private string forRazaoSocial;
        private string forNomeFantasia;
        private string forCNPJ;
        private string forTipoLogradouro;
        private string forLogradouro;
        private string forNumero;
        private string forComplemento;
        private string forBairro;
        private string forCidade;
        private string forUF;
        private string forCEP;
        private string forTelefone;
        private string forCelular;
        private string forEmail;
        private string forContato;

        public int ForCod
        {
            get { return forCod; }
            set { forCod = value; }
        }

        public string ForRazaoSocial
        {
            get { return forRazaoSocial; }
            set { forRazaoSocial = value; }
        }

        public string ForNomeFantasia
        {
            get { return forNomeFantasia; }
            set { forNomeFantasia = value; }
        }

        public string ForCNPJ
        {
            get { return forCNPJ; }
            set
            {
                forCNPJ = value;
            } //implementar validação CNPJ
        }

        public string ForTipoLogradouro
        {
            get { return forTipoLogradouro; }
            set { forTipoLogradouro = value; }
        }

        public string ForLogradouro
        {
            get { return forLogradouro; }
            set { forLogradouro = value; }
        }

        public string ForNumero
        {
            get { return forNumero; }
            set { forNumero = value; }
        }

        public string ForComplemento
        {
            get { return forComplemento; }
            set { forComplemento = value; }
        }

        public string ForBairro
        {
            get { return forBairro; }
            set { forBairro = value; }
        }

        public string ForCidade
        {
            get { return forCidade; }
            set { forCidade = value; }
        }

        public string ForUF
        {
            get { return forUF; }
            set { forUF = value; }
        }

        public string ForCEP
        {
            get { return forCEP; }
            set { forCEP = value; }
        }

        public string ForTelefone
        {
            get { return forTelefone; }
            set { forTelefone = value; }
        }

        public string ForCelular
        {
            get { return forCelular; }
            set { forCelular = value; }
        }

        public string ForEmail
        {
            get { return forEmail; }
            set { forEmail = value; }
        }

        public string ForContato
        {
            get { return forContato; }
            set { forContato = value; }
        }

        public Fornecedor consultarFornecedor(string cnpj)
        {
            ServicosDB sql = new ServicosDB();
            string strConsultar = "SELECT * FROM FORNECEDOR WHERE forCNPJ = '" + cnpj + "'";
            SqlDataReader rsFornecedor;

            try
            {
                rsFornecedor = sql.recordSet(strConsultar);
            }
            catch (SqlException)
            {
                throw new Exception("Falha na conexão com o banco de dados.");
            }

            if (rsFornecedor.HasRows)
            {
                while (rsFornecedor.Read())
                {
                    Fornecedor f = new Fornecedor();
                    f.ForCod = (int)rsFornecedor["forCod"];
                    f.ForRazaoSocial = rsFornecedor["forRazaoSocial"].ToString();
                    f.ForCNPJ = rsFornecedor["forCNPJ"].ToString();
                    f.ForTipoLogradouro = rsFornecedor["forTipoLogradouro"].ToString();
                    f.ForLogradouro = rsFornecedor["forLogradouro"].ToString();
                    f.ForNumero = rsFornecedor["forNumero"].ToString();
                    f.ForComplemento = rsFornecedor["forComplemento"].ToString();
                    f.ForBairro = rsFornecedor["forBairro"].ToString();
                    f.ForCidade = rsFornecedor["forCidade"].ToString();
                    f.ForUF = rsFornecedor["forUF"].ToString();
                    f.ForCEP = rsFornecedor["forCEP"].ToString();
                    f.ForTelefone = rsFornecedor["forTelefone"].ToString();
                    f.ForCelular = rsFornecedor["forCelular"].ToString();
                    f.ForEmail = rsFornecedor["forEmail"].ToString();
                    f.ForContato = rsFornecedor["forContato"].ToString();
                    return f;
                }
            }
            else
            {
                throw new Exception("Fornecedor não encontrado.");
            }

            return null;
        }

        public void atualizarFornecedor(int cod, string razaoSocial, string nomeFantasia, string cnpj, string tipoLogradouro, string logradouro, string numero, string complemento, string bairro, string cidade, string uf, string cep, string telefone, string celular, string email, string contato)
        {
            ServicosDB sql = new ServicosDB();
            string strAtualizar = "UPDATE FORNECEDOR SET forRazaoSocial = '" + razaoSocial + "', forNomeFantasia = '" + nomeFantasia + "', forCNPJ = '" + cnpj + "', forTipoLogradouro = '" + tipoLogradouro
                + "', forLogradouro = '" + logradouro + "', forNumero = '" + numero + "', forComplemento = '" + complemento + "', forBairro = '" + bairro
                + "', forCidade = '" + cidade + "', forUF = '" + uf + "', forCEP = '" + cep + "', forTelefone = '" + telefone + "', forCelular = '" + celular + "', forEmail = '" + email + "', forContato = '" + contato
                + "' WHERE forCod = " + cod;

            try
            {
                sql.executar(strAtualizar);
            }
            catch (SqlException)
            {
                throw new Exception("Falha na conexão com o banco de dados.");
            }
        }

        public void excluirFornecedor(int cod)
        {
            ServicosDB sql = new ServicosDB();
            string strExcluir = "DELETE FROM FORNECEDOR WHERE forCod = " + cod;

            try
            {
                sql.executar(strExcluir);
            }
            catch (SqlException)
            {
                throw new Exception("Falha na conexão com o banco de dados.");
            }
        }

        public void cadastrarFornecedor(string razaoSocial, string nomeFantasia, string cnpj, string tipoLogradouro, string logradouro, string numero, string complemento, string bairro, string cidade, string uf, string cep, string telefone, string celular, string email, string contato)
        {
            Fornecedor f = new Fornecedor();

            if (f.verificarFornecedor(cnpj) == false)
            {
                ServicosDB sql = new ServicosDB();

                string strCadastrar = "INSERT INTO FORNECEDOR VALUES ('" + razaoSocial +"', '"+ nomeFantasia + "', '" + cnpj + "', '" + tipoLogradouro
                    + "', '" + logradouro + "', '" + numero + "', '" + complemento + "', '" + bairro
                    + "', '" + cidade + "', '" + uf + "', '" + cep + "', '" + telefone + "', '" + celular + "', '" + email + "', '" + contato
                    + "')";

                try
                {
                    sql.executar(strCadastrar);
                }
                catch (SqlException)
                {
                    throw new Exception("Falha na conexão com o banco de dados.");
                }
            }
            else
            {
                throw new Exception("CNPJ já cadastrado.");
            }
        }

        public bool verificarFornecedor(string cnpj)
        {
            ServicosDB sql = new ServicosDB();
            string strConsultar = "SELECT * FROM FORNECEDOR WHERE forCNPJ = '" + cnpj + "'";
            SqlDataReader rsFornecedor;

            try
            {
                rsFornecedor = sql.recordSet(strConsultar);
            }
            catch (SqlException)
            {
                throw new Exception("Falha na conexão com o banco de dados.");
            }

            if (rsFornecedor.HasRows)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }
}